package com.estore.view;

import com.estore.model.Product;
import com.estore.service.ProductSorters;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

class ConsoleShop {
    private List<Product> products; // 假设已有商品列表属性
    private Scanner scanner = new Scanner(System.in);

    // 构造方法（假设已初始化products）
    public ConsoleShop(List<Product> products) {
        this.products = products;
    }

    // 显示主菜单
    public void showMenu() {
        System.out.println("===== 商城系统 =====");
        System.out.println("1. 浏览所有商品（默认排序）");
        System.out.println("2. 自定义排序浏览商品");
        System.out.println("0. 退出系统");
        System.out.print("请选择操作：");
    }

    // 浏览商品（支持自定义排序）
    public void browseProducts(Comparator<Product> comparator) {
        if (comparator != null) {
            products.sort(comparator); // 使用自定义比较器排序
        } else {
            Collections.sort(products); // 使用Product类的自然排序（compareTo方法）
        }

        System.out.println("\n===== 商品列表 =====");
        for (int i = 0; i < products.size(); i++) {
            Product p = products.get(i);
            System.out.println((i + 1) + ". ID：" + p.getId() + "，名称：" + p.getName() + "，价格：" + p.getPrice());
        }
        System.out.println("===================\n");
    }

    // 显示排序子菜单并处理用户选择
    public void showSortedProducts() {
        System.out.println("\n===== 排序方式选择 =====");
        System.out.println("1. 按价格从低到高");
        System.out.println("2. 按价格从高到低");
        System.out.println("3. 按库存从多到少");
        System.out.println("0. 返回主菜单");
        System.out.print("请选择排序方式：");

        int choice = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        Comparator<Product> comparator = null;
        switch (choice) {
            case 1:
                comparator = ProductSorters.BY_PRICE_ASC;
                break;
            case 2:
                comparator = ProductSorters.BY_PRICE_DESC;
                break;
            case 3:
                comparator = ProductSorters.BY_STOCK_DESC;
                break;
            case 0:
                return; // 返回主菜单
            default:
                System.out.println("输入无效，请重试！");
                showSortedProducts(); // 重新显示子菜单
                return;
        }

        browseProducts(comparator); // 调用带比较器的浏览方法
    }

    // 启动系统（包含主逻辑）
    public void start() {
        int choice;
        do {
            showMenu();
            choice = scanner.nextInt();
            scanner.nextLine(); // 消费换行符

            switch (choice) {
                case 1:
                    browseProducts(null); // 调用默认排序（自然排序）
                    break;
                case 2:
                    showSortedProducts(); // 调用自定义排序逻辑
                    break;
                case 0:
                    System.out.println("感谢使用，再见！");
                    break;
                default:
                    System.out.println("输入无效，请重试！");
            }
        } while (choice != 0);
    }
}